package response

import (
	"n-server/pkg/common/errorcode"
	"net/http"

	"github.com/gin-gonic/gin"
)

// Response 统一响应结构体
type Response[T any] struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    T      `json:"data"`
}

// Success 成功响应 - data
func SuccessGeneric[T any](c *gin.Context, data T) {
	c.JSON(http.StatusOK, Response[T]{
		Code:    0, // 0 表示成功 (固定约定)
		Message: "ok",
		Data:    data,
	})
}

// Success 成功响应 - nil
func SuccessWithoutData(c *gin.Context) {
	SuccessGeneric[any](c, nil)
}

// Error 错误响应 - Message 基于自定义错误码
func ErrorGeneric[T any](c *gin.Context, code int) {
	c.JSON(http.StatusOK, Response[T]{
		Code:    code,
		Message: errorcode.GetMsg(code),
		Data:    *new(T),
	})
}

// ErrorMsg 错误响应 - 自定义消息
func ErrorMsgGeneric[T any](c *gin.Context, code int, message string) {
	c.JSON(http.StatusOK, Response[T]{
		Code:    code,
		Message: message,
		Data:    *new(T),
	})
}

// 响应封装类 便捷函数，避免每次都写 [any]
func Success[T any](c *gin.Context, data T) {
    SuccessGeneric[any](c, data)
}

func ErrorMsg(c *gin.Context, code int, message string) {
    ErrorMsgGeneric[any](c, code, message)
}

func Error(c *gin.Context, code int) {
    ErrorGeneric[any](c, code)
}